package com.dlc.shop.user.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dlc.shop.user.common.model.UserTag;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 客户标签
 *
 * @author LGH
 * @date 2020-09-09 11:31:16
 */
public interface UserTagMapper extends BaseMapper<UserTag> {

    /**
     * 批量修改标签人数
     * @param tagUser 标签人数map
     */
    void updateBatch(@Param("tagUser") Map<Long, Integer> tagUser);

    /**
     * 根据参数查询标签列表
     * @param page 分页参数
     * @param tagType 标签类型
     * @param tagName 标签名称
     * @return 标签列表
     */
    IPage<UserTag> pageUserTagByParam(Page page, @Param("tagType") Integer tagType, @Param("tagName") String tagName);

    /**
     * 简单过滤并获取标签过滤用的数据
     * @param userTag
     * @return
     */
    List<String> listUserIdByFilterTime(@Param("userTag") UserTag userTag);

    /**
     * 过滤用户（最近支付时间）
     * @param userIds
     * @param userTag
     * @return
     */
    List<String> listUserIdBylastPayTime(@Param("userIds") List<String> userIds, @Param("userTag") UserTag userTag);

    /**
     * 过滤用户（消费次数）
     * @param userIds
     * @param userTag
     * @return
     */
    List<String> listUserIdByPayTimes(@Param("userIds") List<String> userIds, @Param("userTag") UserTag userTag);

    /**
     * 过滤用户（消费金额）
     * @param userIds
     * @param userTag
     * @return
     */
    List<String> listUserIdByPayAmount(@Param("userIds") List<String> userIds, @Param("userTag") UserTag userTag);

    /**
     * 过滤用户(订单均价)
     * @param userIds
     * @param userTag
     * @return
     */
    List<String> listUserIdByAvgAmount(@Param("userIds") List<String> userIds, @Param("userTag") UserTag userTag);

    /**
     * 过滤用户（充值次数）
     * @param userIds
     * @param userTag
     * @return
     */
    List<String> listUserIdByRechargeTimes(@Param("userIds") List<String> userIds, @Param("userTag") UserTag userTag);

    /**
     * 统计该店铺所有标签的用户数
     * @param shopId
     * @param tagType
     * @return
     */
    List<UserTag> listShopTagCount(@Param("shopId") Long shopId, @Param("tagType") Integer tagType);

    /**
     * 根据注册时间范围和成为付费会员时间范围查询用户id
     * @param userTag
     * @return
     */
    List<String> queryUserIdListByRegiestTimeAndVipTime(@Param("userTag") UserTag userTag);
}
